package plugins.detail;

import com.alibaba.druid.util.StringUtils;
import com.oracle.truffle.api.object.DynamicObject;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.OperateOption;
import kd.bos.entity.operate.OperateOptionConst;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin;

import java.util.Calendar;
import java.util.EventObject;

/**
 * 单据界面插件
 */
public class TimeLock extends AbstractBillPlugIn implements Plugin {
    private static final String TIME_FIELD = "dcb4_time"; // 时间字段标识
    private static final String DATE_FIELD = "dcb4_date"; // 新增日期字段标识
    private static final String ACTION_BUTTON = "dcb4_directly";   // 按钮标识

    @Override
    public void afterBindData(EventObject e) {
        // 页面加载时锁定时间字段
        this.getView().setEnable(false, TIME_FIELD);
        this.getView().setEnable(false, DATE_FIELD);
    }

    @Override

    public void registerListener(EventObject e) {
        // 此处必须是工具栏控件的标识
        this.addItemClickListeners("tbmain", "advcontoolbarap");
        super.registerListener(e);
    }


    @Override
    public void itemClick(ItemClickEvent evt) {
        String itemKey = evt.getItemKey();
        // 此处必须是工具栏项的标识! 工具栏项! 工具栏项! 工具栏项!
        if (StringUtils.equalsIgnoreCase(itemKey, ACTION_BUTTON)) {

            // 临时解锁字段
            this.getView().setEnable(true, TIME_FIELD);
            this.getView().setEnable(true, DATE_FIELD);

            // 获取当前时间的小时、分钟、秒
            Calendar calendar = Calendar.getInstance();
            int hour = calendar.get(Calendar.HOUR_OF_DAY);   // 当前小时（24小时制）
            int minute = calendar.get(Calendar.MINUTE);     // 当前分钟
            int second = calendar.get(Calendar.SECOND);     // 当前秒

            //获取当前日期
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始，所以需要加1
            int day = calendar.get(Calendar.DAY_OF_MONTH); // 当前日

            // 写入日期字段（只保留年月日部分）
            this.getModel().setValue(DATE_FIELD, String.format("%04d-%02d-%02d", year, month, day));

            // 计算从当天零点到当前时间的总秒数
            int totalSeconds = hour * 3600 + minute * 60 + second;

            // 写入时间字段（单据头字段）
            this.getModel().setValue(TIME_FIELD, totalSeconds);

            // 保存单据
            this.getView().invokeOperation("save");

            // 立即锁定字段
            this.getView().setEnable(false, TIME_FIELD);
            this.getView().setEnable(false, DATE_FIELD);

            // 提交单据
            OperateOption submitOption = OperateOption.create();
            submitOption.setVariableValue(OperateOptionConst.ISSHOWMESSAGE, "false");
            this.getView().invokeOperation("submit", submitOption);


            // 刷新界面显示
            this.getView().updateView(TIME_FIELD);
        }

        super.itemClick(evt);

    }
}